Data modeling can be defined as the analysis of data and the relationships between data. Data modeling has been used for a number of years to make intelligent decisions about how to organize and store data. In general, data modeling results in the creation of a data model comprising abstract data types that describe the data of interest and the relationships between the data. The abstract data types become the templates for describing actual objects of data used in an application.
In recent years, data modeling has taken on even greater importance as the use and capacity of electronic media to store text, music, pictures, and other types of data has dramatically increased. Conventional file systems, such as those based on a file allocation table, or FAT file system, impose constraints on the organization and storage of data that are often at odds with data modeling analysis and result in less than optimal data organization and storage. For example, most conventional file systems require files to be maintained in a hierarchical directory tree. Besides being location dependent, a hierarchical organization may not be the most advantageous way to access the files from the user's point of view. Moreover, the data may not be file-based at all, but rather non-file data, such as personal contacts, event calendars, electronic mail, and facsimile transmissions.
Recent improvements in data storage systems have allowed greater flexibility in organizing data to facilitate monitoring, managing and manipulating data. For example, in the Windows® operating system, the WinFS data storage subsystem is based on a schematized data model that allows users to organize information independent of how the information is stored physically. The data storage subsystem includes a base schema created with the various constructs provided by WinFS. Users may extend the base schema or add new schemas to suit their needs.
Although WinFS eliminates many of the constraints imposed by conventional file systems, some limitations remain. For example, the schematized data model upon which the WinFS data storage subsystem is based supports single inheritance but not multiple inheritance. Inheritance is a particular type of relationship between two different abstract data types where one abstract data type inherits the characteristics of another abstract data type, sometimes described as an inheritance hierarchy. As an example, rather than redefine primate characteristics for each abstract data type describing a monkey, an ape, and a human, those characteristics could be defined once in an abstract data type describing a primate, referred to as a super type, and inherited in the other abstract data types, referred to as sub types. Single inheritance is when an abstract data type can inherit characteristics from just one super type, whereas multiple inheritance is when an abstract data type inherits characteristics from more than one super type.
In general, inheritance is one of the most useful concepts employed in data modeling because it eliminates redundancies in data and promotes greater consistency in the overall structure of the data and the applications that use the data. Multiple inheritance can be very useful in describing real-world data that can be classified in many different ways, e.g., messages classified by how they were transported, to whom they were sent, and with what application they were viewed, often referred to as multityping. Though useful, there are a number of reasons why data models choose not to support multiple inheritance, the most pertinent being increased data storage requirements as well as increased complexity and ambiguity in the data model. Alternatives to multiple inheritance include strong typing, by defining separate abstract data types for each type of object, e.g., separate abstract data types for email and fax messages. Strong typing has the disadvantage of only allowing the definition of properties specific to the particular abstract data type. Another alternative is weak typing, in which abstract data types are grouped into a category, e.g., an abstract data type for a message object grouped into an email category or a fax category, depending on whether the message object is an email or a fax. But weak typing, too, has a disadvantage, in this case the disadvantage of not allowing the definition of category-specific properties in the abstract data type, e.g., not allowing the definition of fax properties in the abstract data type for a message.
Consequently, other techniques must be developed for describing data that requires multityping using a data storage subsystem having a single inheritance hierarchy in a manner that makes efficient use of data storage capacity and does not introduce undesirable complexity and ambiguity.